<?php
register_shutdown_function("Checkin::telos");
require_once "../lib/standard.php";

// Η συμβολική σταθερά "NO_PHOTO" περιέχει το url φωτογραφίας που
// θα εμφανίζεται στους παίκτες που δεν έχουν ανεβάσει φωτογραφία προφίλ.

define("NO_PHOTO", Globals::plires_url("images/misc/noImage.png"));

Globals::header_html();
Globals::session();
Globals::database();

Globals::perastike_must("onoma");
Globals::perastike_must("email");
Globals::perastike_must("katastasi");
Globals::perastike_must("postel");
Globals::perastike_must("plati");
Globals::perastike_must("paraskinio");
Globals::perastike_must("profinfo");

Globals::autocommit(FALSE);
switch (Globals::perastike_must("mode")) {
case "egrafi":
	Globals::perastike_must("login");
	Globals::perastike_must("kodikos1");
	Checkin::egrafi();
	break;
case "enimerosi":
	Globals::perastike_must("nigol");
	Globals::perastike_must("kodikos");
	Checkin::enimerosi();
	break;
}

Checkin::peparam();
Checkin::profinfo();
Globals::commit();
Photo::process();

Class Checkin {
	public static $pektis;

	public static function egrafi() {
		$slogin = Globals::asfales_sql($_REQUEST["login"]);
		$kodikos = sha1($_REQUEST["kodikos1"]);
		$sonoma = Globals::asfales_sql($_REQUEST["onoma"]);
		$email = Globals::email_check($_REQUEST["email"]);
		$semail = $email ? Globals::asfales_sql($email) : "NULL";

		$query = "INSERT INTO `pektis` (`login`, `onoma`, `email`, `kodikos`) VALUES (" .
			$slogin . "," . $sonoma . "," . $semail . ",'" . $kodikos . "')";
		@mysqli_query(Globals::$db, $query);
		switch (Globals::sql_errno()) {
		case 1062: Globals::klise_fige('Το login name "' . $_REQUEST["login"] . '" δεν είναι διαθέσιμο');
		case 0: break;
		default: Globals::klise_fige("Απέτυχε η εισαγωγή στοιχείων στην database");
		}

		self::$pektis = new Pektis($_REQUEST["login"]);
		$err = FALSE;
		$err |= ($kodikos != self::$pektis->kodikos);
		$err |= ($_REQUEST["onoma"] != self::$pektis->onoma);
		$err |= ($email != self::$pektis->email);
		if ($err) Globals::klise_fige("Απέτυχε η δημιουργία λογαριασμού");
		$_SESSION["paraskinio"] = $_REQUEST["paraskinio"];

		copy(NO_PHOTO, Photo::photo_file());

		// Τα στοιχεία του χρήστη έχουν εισαχθεί επιτυχώς και επιχειρούμε
		// να δημιουργήσουμε νέα συνεδρία για τον καινούριο χρήστη.

		$klidi = Sinedria::nea(Checkin::$pektis->login);
		if ($klidi === FALSE) Globals::klise_fige();

		$_SESSION["pektis"] = Checkin::$pektis->login;
		$_SESSION["klidi"] = $klidi;
		print "{pektis:" . Globals::asfales_json(Checkin::$pektis->login) . ",klidi:" .
			Globals::asfales_json($klidi) . "}";
	}

	public static function enimerosi() {
		$slogin = Globals::asfales_sql($_REQUEST["nigol"]);
		$kodikos = sha1(Globals::perastike_must("kodikos"));
		$sonoma = Globals::asfales_sql($_REQUEST["onoma"]);
		$email = Globals::email_check($_REQUEST["email"]);
		$semail = $email ? Globals::asfales_sql($email) : "NULL";
		$neos_kodikos = (Globals::perastike("kodikos1") && ($_REQUEST["kodikos1"] !== "")) ?
			sha1($_REQUEST["kodikos1"]) : FALSE;

		$query = "UPDATE `pektis` SET `onoma` = " . $sonoma . ", `email` = " . $semail;
		if ($neos_kodikos !== FALSE) $query .= ", `kodikos` = '" . $neos_kodikos . "'";
		$query .= " WHERE (`login` = " . $slogin . ") AND (`kodikos` = '" . $kodikos . "')";
		@mysqli_query(Globals::$db, $query);
		if (Globals::sql_errno()) Globals::klise_fige("Απέτυχε η ενημέρωση των στοιχείων στην database");
		$_SESSION["paraskinio"] = $_REQUEST["paraskinio"];

		self::$pektis = new Pektis($_REQUEST["nigol"]);
		$err = FALSE;
		$err |= ($_REQUEST["onoma"] != self::$pektis->onoma);
		$err |= ($email != self::$pektis->email);
		if ($neos_kodikos !== FALSE) $err |= ($neos_kodikos != self::$pektis->kodikos);
		else $err |= ($kodikos != self::$pektis->kodikos);
		if ($err) Globals::klise_fige("Απέτυχε η ενημέρωση των στοιχείων λογαριασμού");

		print "{pektis:" . Globals::asfales_json($_SESSION["pektis"]) . ",klidi:" .
			Globals::asfales_json($_SESSION["klidi"]) . "}";
	}

	public static function peparam() {
		Globals::update_peparam(self::$pektis->login, "ΚΑΤΑΣΤΑΣΗ", $_REQUEST["katastasi"]);
		Globals::update_peparam(self::$pektis->login, "ΑΣΟΙ", Globals::perastike("asoi") ? "ΝΑΙ" : "ΟΧΙ");
		Globals::update_peparam(self::$pektis->login, "ΠΑΣΟ", Globals::perastike("paso") ? "ΝΑΙ" : "ΟΧΙ");
		Globals::update_peparam(self::$pektis->login, "ΤΕΛΕΙΩΜΑ", $_REQUEST["postel"]);
		Globals::update_peparam(self::$pektis->login, "ΠΛΑΤΗ", $_REQUEST["plati"]);
		Globals::update_peparam(self::$pektis->login, "ΠΑΡΑΣΚΗΝΙΟ", $_REQUEST["paraskinio"]);
		self::$pektis->get_peparam();
		$err = FALSE;
		$err |= (self::$pektis->katastasi() != $_REQUEST["katastasi"]);
		$err |= (self::$pektis->asoi() != Globals::perastike("asoi"));
		$err |= (self::$pektis->paso() != Globals::perastike("paso"));
		$err |= (self::$pektis->postel() != $_REQUEST["postel"]);
		$err |= (self::$pektis->plati() != $_REQUEST["plati"]);
		$err |= (self::$pektis->paraskinio() != $_REQUEST["paraskinio"]);
		if (!$err) return;

		Globals::rollback();
		Globals::klise_fige("Απέτυχε η ενημέρωση των παραμέτρων του λογαριασμού");
	}

	public static function profinfo() {
		if (self::$pektis->set_profinfo($_REQUEST["profinfo"])) return;

		Globals::rollback();
		Globals::klise_fige("Απέτυχε η ενημέρωση προφίλ του παίκτη");
	}

	public static function telos() {
		?>@EOD@<script type="text/javascript">
		//<![CDATA[
		window.parent.Account.checkinCheck();
		//]]>
		</script>
		<?php
		Globals::klise_fige();
	}
}

Class Photo {
	public static function process() {
		if (Globals::den_perastike("photoEnergia")) return;
		switch ($_REQUEST["photoEnergia"]) {
		case "alagi":
			self::alagi();
			break;
		case "diagrafi":
			self::diagrafi();
			break;
		}
	}

	public static function alagi() {
		if (!is_array($_FILES)) return;
		if (!array_key_exists("photoFile", $_FILES)) return;
		if (!is_array($_FILES["photoFile"])) return;
		if (!array_key_exists("name", $_FILES["photoFile"])) return;
		if (!$_FILES["photoFile"]["name"]) return;
		if (!array_key_exists("tmp_name", $_FILES["photoFile"])) return;
		if (!array_key_exists("size", $_FILES["photoFile"])) return;

		$max_photo_size = Globals::perastike("max_photo_size") ? $_REQUEST["max_photo_size"] : 100000;
		if ($_FILES["photoFile"]["size"] > $max_photo_size) {
			print("Το μέγεθος του αρχείου εικόνας υπερβαίνει το όριο (" . $max_photo_size . "kB)");
			return;
		}

		$ikona = self::photo_file();
		if(!@move_uploaded_file($_FILES['photoFile']['tmp_name'], $ikona)) {
			print('Σφάλμα κατά τη μεταφόρτωση του αρχείου εικόνας');
			return;
		}

		@chmod($ikona, 0666);
	}

	public static function diagrafi() {
		copy(NO_PHOTO, Photo::photo_file());
	}

	public static function photo_file() {
		$dir = "../photo/" . strtolower(substr(Checkin::$pektis->login, 0, 1));
		if (!is_dir($dir)) {
			@mkdir($dir) || Globals::klise_fige($dir . ": cannot create directory");
			chmod($dir, 0777) || Globals::klise_fige();
		}

		return $dir . "/" . Checkin::$pektis->login . ".jpg";
	}
}
?>
